package com.zenith.zongheng.demo.tool;

import com.zenith.zongheng.core.exception.ProcessException;
import com.zenith.zongheng.demo.api.LeaveInfoService;
import com.zenith.zongheng.demo.constant.LeaveResultConstant;
import com.zenith.zongheng.demo.domain.entity.LeaveInfo;
import com.zenith.zongheng.demo.service.LeaveInfoServiceImpl;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Objects;

/**
 * 文件操作类
 * 各类文件操作
 *
 * @author wuyue
 * @version 1.0, 2022/1/2 21:23
 */
public class FileOp {
    /**
     * 不知道部署环境，检测系统
     *
     * @return 相对地址
     * @throws FileNotFoundException 错误
     */
    private static String systemCheck() throws FileNotFoundException {
        String os = System.getProperty("os.name");
        String windows = "win";
        //windows系统
        if (os.toLowerCase().startsWith(windows)) {
            //获取项目相对路径
            return System.getProperty("user.dir") + "/resources/file";
        } else {
            //linux系统获取根目录,如果是linux环境下，目录为jar包同级目录
            return ResourceUtils.getURL("classpath:").getPath() + "/file/";
        }
    }

    /**
     * <p>分析文件，设置保存路径,并创建</p>
     *
     * @param userName    请假人名字
     * @param createTime  创建时间
     * @param fileOldName 文件老名字
     * @return 路径
     */
    private static String[] fileDst(String userName, String createTime, String fileOldName) throws FileNotFoundException {
        String path = systemCheck() + "/leave-file/" + userName + "/";
        String fileName = createTime.replaceAll(" ", "-").
                replaceFirst(":", "点").
                replace(":", "分") +
                fileOldName.substring(fileOldName.lastIndexOf("."));
        File resultPath = new File(path);
        if (!resultPath.exists()) {
            boolean ok = resultPath.mkdirs();
        }
        return new String[]{path, fileName};
    }

    /**
     * <p>
     * 文件路径设置为/leave-file/{name}/{time}.{suffix}
     * 先进行路径分析，再存储
     * <p/>
     *
     * @param userName   请假人名字
     * @param createTime 创建时间
     * @param file       文件
     * @return 储存路径，0：路径，1：文件名
     * @throws IOException 报错
     */
    public static String[] uploadFile(String userName, String createTime, MultipartFile file) throws IOException {
        //分析存储地址
        String[] dst = fileDst(userName, createTime, Objects.requireNonNull(file.getOriginalFilename()));
        //创建文件存放地址
        File resultPath = new File(dst[0] + "/" + dst[1]);
        //保存
        file.transferTo(resultPath);
        return dst;
    }
}

